/**
 * 目标：访问路径不存在时，返回结果中包含请求路径path
    实现：1、创建一个异常过滤器，负责将捕获作为HttpException类实例的异常
        2、访问底层平台Request、Response，通过访问Request对象，
            提取原始url将其包含在日志信息中
        3、使用Response.jon()方法，使用Response对象直接控制发送的响应
 * 
 */


import { ArgumentsHost, ExceptionFilter, Catch, HttpException, HttpStatus, ServiceUnavailableException } from "@nestjs/common";
import { Request, Response } from "express";
@Catch(HttpException)
export class AllExceptionsFilter implements ExceptionFilter {
    catch(exception: Error, host: ArgumentsHost) {
        const ctx = host.switchToHttp();
        const request = ctx.getRequest < Request > ();
        const response = ctx.getResponse < Response > ();

        // request.log.error(exception)

        // 非 HTTP 标准异常的处理。
        response.status(HttpStatus.SERVICE_UNAVAILABLE).send({
            statusCode: HttpStatus.SERVICE_UNAVAILABLE,
            timestamp: new Date().toISOString(),
            path: request.url,
            message: new ServiceUnavailableException().getResponse(),
        });
    }
}
